﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

using Furion;
using Furion.Schedule;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Neto.Json;
using Neto.Logging;

namespace Neto.Job;

[AppStartup(500)]
public class JobStartup : AppStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSchedule(options =>
        {
            // 是否使用 UTC 时间，该配置主要用来作为作业调度器检查时间格式的依据
            options.UseUtcTimestamp = false;

            // 是否输出作业调度器日志
            options.LogEnabled = false;

            // 配置集群 Id，默认值为启动程序集的名称
            options.ClusterId = "cluster1";

            // 配置输出 SQL 的数据库类型，Furion 4.8.2.3+
            options.BuildSqlType = SqlTypes.SqlServer;

            // 启用作业执行日志输出，Furion 4.8.3.7+ 版本支持
            options.JobDetail.LogEnabled = false; // 默认 false

            // 定义未捕获的异常，通常是 Task 异常
            options.UnobservedTaskExceptionHandler = (obj, args) =>
            {
                LogX.Debug($"obj:{obj?.ToJson()}\r\nargs:{args?.ToJson()}");
            };


            //手动
            // 注册作业，并配置作业触发器
            //options.AddJob<MyJob>(Triggers.Secondly()); // 表示每秒执行

            var schedulerBuilders = App.EffectiveTypes.ScanToBuilders();
            //自动注册
            options.AddJob(App.EffectiveTypes.ScanToBuilders());
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 还可以配置生产环境关闭
        app.UseScheduleUI(options =>
        {
            // 此操作暂提供 URL 重写功能，也就是会自动跳转
            options.RequestPath = "/custom-job"; // Furion 4.8.5.6+ 版本支持，必须以 / 开头且不以 / 结尾
            options.DisableOnProduction = true;
        });
    }
}